package com.ruoyi.xuexiao.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.config.MinIOConfigProperties;
import com.ruoyi.constant.EXTENT;
import com.ruoyi.xuexiao.domain.entity.KsDom;
import com.ruoyi.xuexiao.domain.param.KsDomParam;
import com.ruoyi.xuexiao.mapper.KsDomMapper;
import com.ruoyi.xuexiao.service.KsDomService;
import io.swagger.annotations.ApiImplicitParam;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @ClassName KsDomServiceImpl层
 * 2024/5/27 19:07
 * @Description TODO
 * @Version 1.0
 * 郭伟明
 **/
@Service
@AllArgsConstructor
public class KsDomServiceImpl extends ServiceImpl<KsDomMapper, KsDom> implements KsDomService {

    private final KsDomMapper ksDomMapper;

    @Autowired
    private MinIOConfigProperties minIOConfigProperties;

    /**
     * 挂载文件添加
     *
     * @param
     * @throws Exception 2024/5/27 19:08
     *                   郭伟明
     * @paramksDomParam
     */
    @Override
    @Transactional
    public Map<String, Object> uploadMountFile(KsDomParam ksDomParam) throws Exception {
        Map<String, Object> hashMap = new HashMap<>();
        List<KsDom> ksDomList = new ArrayList<>();
        // 遍历上传的文件数组
        String url = ksDomParam.getUrl();
        String replaceFirst = url.replaceFirst("^[A-Z]:/", "");
        // 构建文件 URL
        String fileUrl = minIOConfigProperties.getPrexypath() + replaceFirst + "/" + ksDomParam.getName();
        // 创建 KsDom 对象并设置属性值
        KsDom dom = new KsDom();
        String year = null;
        String month = null;
        if (Objects.nonNull(ksDomParam.getDateTime())) {
            // 截取掉横线
            String[] split = ksDomParam.getDateTime().split("-");

            // 拿到年
            year = split[0];
            // 拿到月
            month = split[1];
        }
        dom.setId(ksDomParam.getId());
        dom.setXkzh(ksDomParam.getXkzh());
        if (ksDomParam.getMc().length()>=EXTENT.HUNDRED){
            throw new Exception("名称标识长度不能超过100");
        }
        dom.setMc(ksDomParam.getMc());
        dom.setXkzh(ksDomParam.getXkzh());
        dom.setYear(Integer.valueOf(year));
        dom.setMonth(Integer.valueOf(month));
        dom.setService(ksDomParam.getService());
        dom.setUrl(fileUrl);
        // 将 KsDom 对象添加到列表中
        ksDomList.add(dom);
        //批量修改
        this.saveOrUpdateBatch(ksDomList);
        hashMap.put("success", "200");
        return hashMap;
    }

    /**
     * 根据给定的 id 对象删除对应的记录。
     *
     * @param id 要删除的 KsDom 对象。
     * @return 包含删除结果的映射，键为 "删除成功"，值为删除的记录数。
     * 2024/5/27 19:08
     * 郭伟明
     */
    @Override
    @Transactional
    @ApiImplicitParam(name = "id", value = "要删除的 KsDom 对象的 ID", required = true, dataType = "Integer")
    public Map<String, Object> DeleteEcho(@RequestParam Integer id) {
        // 创建用于存储结果的映射
        Map<String, Object> map = new HashMap<>();
        // 根据给定的 KsDom 对象的 ID 删除对应的记录
        int deleteById = ksDomMapper.deleteById(id);
        // 将删除结果放入映射中
        map.put("删除成功", deleteById);
        // 返回结果映射
        return map;
    }


    /**
     * 根据给定的ID查询KsDom信息，并将其相关参数封装到Map中返回。
     *
     * @param ksDomParam 包含要查询的KsDom的ID的对象
     * @return 返回一个包含KsDom详细信息的Map对象
     * 郭伟明
     */
    public Map<String, Object> query(KsDomParam ksDomParam) {
        // 创建一个空的HashMap用于存储数据
        Map<String, Object> map = new HashMap<>();
        // 根据提供的ID查询KsDom信息
        KsDom ksDom = baseMapper.selectById(ksDomParam.getId());
        // 创建一个新的KsDomParam对象，用于后续设置参数
        KsDomParam param = new KsDomParam();
        // 将查询到的KsDom的信息设置到KsDomParam对象中
        param.setMc(ksDom.getMc());
        String dateTime = ksDom.getYear() + "-" + ksDom.getMonth();
        param.setDateTime(dateTime);
        param.setService(ksDom.getService());
        param.setXkzh(ksDom.getXkzh());
        param.setId(ksDom.getId());
        param.setUrl(ksDom.getUrl());
        // 匹配最后一个斜杠后的数字部分
        String pattern = "/(\\d+)/?$";
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(ksDom.getUrl());
        if (m.find()) {
            String name = m.group(1);
            param.setName(name);
        }
        // 将KsDomParam对象封装到Map中，以"data"为键
        map.put("data", param);
        // 返回包含KsDom信息的Map对象
        return map;
    }
}
